package Data_Structure.Tree.Heap;

import java.util.Arrays;
import java.util.Random;

/**
 * @className: Test
 * @author: 芃
 * @description: 测试堆
 * @date: 2023/8/24 17:33
 */
//堆的概念及定义：
//使用数组的方式存储二叉树，即将二叉树的层序遍历存入数组当中，主要用于完全二叉树，非完全二叉树会有空间上的浪费
//大根堆：root节点的左右子树都大于root节点的值
//小根堆：root节点的左右字数都小于root节点的值
//堆逻辑上时一颗完全二叉树，但是物理上是保存在数组中的
//堆的应用-优先级队列-PriorityQueue
//堆相关OJ习题-TopK问题
//堆的其他应用-堆排序
public class Test {
    public static void main(String[] args) {
        Random random = new Random();
        int[] array = new int[10];
        for (int i = 0; i < 10; i++) {
            array[i] = random.nextInt(100);
        }
        System.out.println(Arrays.toString(array));
        TestBigHeap testHeap = new TestBigHeap();
        testHeap.createBigHeap(array);
        System.out.println(Arrays.toString(testHeap.elem));
        testHeap.offer(101);
        System.out.println(Arrays.toString(testHeap.elem));
        testHeap.heapSort();
        System.out.println(Arrays.toString(testHeap.elem));
    }
}
